package com.qsw.paper.controller.admin;


import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.github.houbb.heaven.util.secrect.Md5Util;
import com.qsw.paper.constant.JwtClaimsConstant;
import com.qsw.paper.constant.MessageConstants;
import com.qsw.paper.exception.ObjectException;
import com.qsw.paper.pojo.dto.AdminLoginDto;
import com.qsw.paper.pojo.entity.Admins;
import com.qsw.paper.pojo.vo.UserLoginVO;
import com.qsw.paper.properties.JwtProperties;
import com.qsw.paper.result.Result;
import com.qsw.paper.service.IAdminsService;
import com.qsw.paper.utils.JwtUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

import javax.validation.Valid;
import java.util.HashMap;
import java.util.Map;

/**
 * <p>
 * 管理员表 前端控制器
 * </p>
 *
 * @author qsw
 * @since 2024-11-15
 */
@RestController
@RequestMapping("/admin")
@RequiredArgsConstructor
@Slf4j
public class AdminsController {


    private final IAdminsService iAdminsService;

    private final JwtProperties jwtProperties;

    /**
     * 管理员登录
     *
     * @param loginDto dto
     * @return jwt令牌 token
     */
    @PostMapping("/login") // 映射 POST 请求到 "/login" 路径
    public Result<?> login(@RequestBody @Valid AdminLoginDto loginDto) {
        // 打印管理员登录请求日志
        log.info("管理员登录:{}", loginDto);

        // 调用 Service 层的 login 方法验证登录信息，并获取管理员对象
        Admins admins = iAdminsService.login(loginDto);

        // 创建一个 Map 用于存储 JWT 的自定义声明数据
        Map<String, Object> map = new HashMap<>();
        map.put(JwtClaimsConstant.EMP_ID, admins.getAdminId()); // 将管理员 ID 存入声明数据

        // 生成 JWT 令牌，使用管理员的密钥和有效时间等配置信息
        String token = JwtUtil.createJwt(jwtProperties.getAdminSecretKey(), jwtProperties.getAdminTtl(), map);

        // 返回成功响应，附带生成的 JWT 令牌
        return Result.success(token, MessageConstants.LOGIN_SUCCESS);
    }

}
